import type { ReactNode } from 'react';
import type { 
  IStudent, 
  IStudentCreateRequest, 
  IStudentUpdateRequest, 
  IStudentQueryParams,
  IStudentSummary 
} from './student';
import type { StudentStatusEnum, StudentActionEnum } from './enums';

/**
 * 学生卡片组件 Props
 * @description 学生卡片组件的属性接口
 */
export interface IStudentCardProps {
  /** 学生信息 */
  student: IStudent;
  /** 是否显示详细信息 */
  showDetails?: boolean;
  /** 是否可编辑 */
  editable?: boolean;
  /** 是否可删除 */
  deletable?: boolean;
  /** 是否显示操作按钮 */
  showActions?: boolean;
  /** 自定义操作按钮 */
  actions?: ReactNode;
  /** 点击编辑回调 */
  onEdit?: (student: IStudent) => void;
  /** 点击删除回调 */
  onDelete?: (studentId: string) => void;
  /** 点击查看课表回调 */
  onViewSchedule?: (studentId: string) => void;
  /** 点击卡片回调 */
  onClick?: (student: IStudent) => void;
  /** 自定义样式类名 */
  className?: string;
  /** 是否加载中 */
  loading?: boolean;
}

/**
 * 学生表单组件 Props
 * @description 学生表单组件的属性接口
 */
export interface IStudentFormProps {
  /** 编辑的学生信息（编辑模式时传入） */
  student?: IStudent;
  /** 表单模式 */
  mode?: 'create' | 'edit' | 'view';
  /** 是否显示表单 */
  visible: boolean;
  /** 是否只读模式 */
  readonly?: boolean;
  /** 表单标题 */
  title?: string;
  /** 提交回调 */
  onSubmit: (data: IStudentCreateRequest | IStudentUpdateRequest) => void | Promise<void>;
  /** 取消回调 */
  onCancel: () => void;
  /** 表单验证失败回调 */
  onValidationError?: (errors: Record<string, string>) => void;
  /** 是否提交中 */
  loading?: boolean;
  /** 自定义样式类名 */
  className?: string;
}

/**
 * 学生列表组件 Props
 * @description 学生列表组件的属性接口
 */
export interface IStudentListProps {
  /** 学生列表数据 */
  students: IStudent[];
  /** 是否加载中 */
  loading?: boolean;
  /** 列表为空时的提示 */
  emptyText?: string;
  /** 是否显示分页 */
  showPagination?: boolean;
  /** 当前页码 */
  currentPage?: number;
  /** 每页数量 */
  pageSize?: number;
  /** 总数量 */
  total?: number;
  /** 是否可选择 */
  selectable?: boolean;
  /** 选中的学生ID列表 */
  selectedStudentIds?: string[];
  /** 是否显示操作列 */
  showActions?: boolean;
  /** 自定义列配置 */
  columns?: Array<{
    key: keyof IStudent;
    title: string;
    width?: number;
    render?: (value: any, student: IStudent) => ReactNode;
  }>;
  /** 选择变化回调 */
  onSelectionChange?: (selectedIds: string[]) => void;
  /** 编辑学生回调 */
  onEdit?: (student: IStudent) => void;
  /** 删除学生回调 */
  onDelete?: (studentId: string) => void;
  /** 查看学生详情回调 */
  onView?: (student: IStudent) => void;
  /** 查看学生课表回调 */
  onViewSchedule?: (studentId: string) => void;
  /** 分页变化回调 */
  onPageChange?: (page: number, pageSize: number) => void;
  /** 自定义样式类名 */
  className?: string;
}

/**
 * 学生搜索组件 Props
 * @description 学生搜索组件的属性接口
 */
export interface IStudentSearchProps {
  /** 搜索关键词 */
  keyword?: string;
  /** 高级筛选条件 */
  filters?: IStudentQueryParams;
  /** 是否显示高级筛选 */
  showAdvancedFilters?: boolean;
  /** 搜索占位符 */
  placeholder?: string;
  /** 是否显示搜索建议 */
  showSuggestions?: boolean;
  /** 搜索建议列表 */
  suggestions?: Array<{
    id: string;
    name: string;
    studentId: string;
    highlight?: string;
  }>;
  /** 搜索回调 */
  onSearch: (keyword: string, filters?: IStudentQueryParams) => void;
  /** 重置搜索回调 */
  onReset?: () => void;
  /** 筛选条件变化回调 */
  onFiltersChange?: (filters: IStudentQueryParams) => void;
  /** 选择搜索建议回调 */
  onSuggestionSelect?: (student: { id: string; name: string; studentId: string }) => void;
  /** 自定义样式类名 */
  className?: string;
}

/**
 * 学生选择器组件 Props
 * @description 学生选择器组件的属性接口
 */
export interface IStudentSelectorProps {
  /** 学生列表 */
  students?: IStudentSummary[];
  /** 选中的学生ID列表 */
  selectedStudentIds: string[];
  /** 是否多选 */
  multiple?: boolean;
  /** 是否禁用 */
  disabled?: boolean;
  /** 占位符 */
  placeholder?: string;
  /** 是否显示搜索 */
  showSearch?: boolean;
  /** 是否显示全选 */
  showSelectAll?: boolean;
  /** 最大选择数量 */
  maxCount?: number;
  /** 选择变化回调 */
  onChange: (selectedIds: string[]) => void;
  /** 搜索回调 */
  onSearch?: (keyword: string) => void;
  /** 自定义渲染选项 */
  renderOption?: (student: IStudentSummary) => ReactNode;
  /** 自定义样式类名 */
  className?: string;
}

/**
 * 学生统计组件 Props
 * @description 学生统计组件的属性接口
 */
export interface IStudentStatisticsProps {
  /** 统计数据 */
  statistics?: {
    totalCount: number;
    activeCount: number;
    inactiveCount: number;
    graduatedCount: number;
    gradeDistribution: Array<{ grade: string; count: number }>;
    classDistribution: Array<{ class: string; count: number }>;
  };
  /** 是否加载中 */
  loading?: boolean;
  /** 是否显示图表 */
  showCharts?: boolean;
  /** 图表类型 */
  chartType?: 'pie' | 'bar' | 'line';
  /** 点击统计项回调 */
  onStatisticClick?: (type: string, value: string) => void;
  /** 自定义样式类名 */
  className?: string;
}

/**
 * 学生操作按钮组件 Props
 * @description 学生操作按钮组件的属性接口
 */
export interface IStudentActionButtonsProps {
  /** 学生信息 */
  student: IStudent;
  /** 可用的操作列表 */
  actions?: StudentActionEnum[];
  /** 按钮大小 */
  size?: 'small' | 'middle' | 'large';
  /** 按钮类型 */
  type?: 'default' | 'primary' | 'text' | 'link';
  /** 是否禁用 */
  disabled?: boolean;
  /** 操作回调 */
  onAction: (action: StudentActionEnum, student: IStudent) => void;
  /** 自定义样式类名 */
  className?: string;
}